package org.dromara.community.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.dromara.community.entity.AsUserActivity;
import org.dromara.community.entity.dto.AsUserActivityDTO;
import org.dromara.community.mapper.AsUserActivityMapper;
import org.dromara.community.service.AsUserActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用户活动关注
 *
 * @author zhiqiang
 * @date 2022/01/06
 */
@RestController
@RequestMapping("asUserActivity")
public class AsUserActivityController {


    @Autowired
    private AsUserActivityService asUserActivityService;

    @Autowired
    private AsUserActivityMapper asUserActivityMapper;


    /**
     * 插入用户活动
     * 此方法允许通过POST请求插入一个新的用户活动记录
     *
     * @param asUserActivity 包含用户活动详细信息的对象
     * @param id             可选参数，用于指定要关联的用户ID
     * @return 返回一个包含操作结果和消息的响应实体
     */
    @Operation(summary = "插入用户活动关注")
    @PostMapping("insertUserActivity")
    public ResponseEntity<Map<String, Object>> insertUserActivity(
        @RequestBody AsUserActivity asUserActivity,
        @RequestParam(value = "id", required = false) Long id) {

        Map<String, Object> response = new HashMap<>();
        // 尝试插入用户活动记录，result值表示插入操作的结果
        int result = asUserActivityMapper.insert(asUserActivity);

        // 根据插入结果设置响应信息
        if (result > 0) {
            // 插入成功
            response.put("success", true);
            response.put("message", "收藏成功");
            return ResponseEntity.ok(response);
        } else {
            // 插入失败
            response.put("success", false);
            response.put("message", "收藏失败");
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
        }
    }

    /**
     * 取消用户活动收藏
     * <p>
     * 本方法通过GET请求处理方式，接收一个用户活动收藏记录的ID，然后尝试删除该记录
     * 主要用于用户取消对某个活动的收藏操作
     *
     * @param id 用户活动收藏记录的ID，用于定位并删除特定的收藏记录
     * @return 返回一个包含操作结果的Map，通过Http响应返回给客户端
     */
    @Operation(summary = "取消用户活动关注")
    @GetMapping("delUserActivity")
    public ResponseEntity<Map<String, Object>> delUserActivity(
        @RequestParam(value = "id") Long id) {

        // 初始化响应体
        Map<String, Object> response = new HashMap<>();
        // 尝试删除用户活动记录，result值表示删除操作的结果
        int result = asUserActivityMapper.deleteById(id);

        // 根据删除结果设置响应信息
        if (result > 0) {
            // 删除成功
            response.put("success", true);
        }
        // 设置操作提示信息
        response.put("message", "取消收藏");
        // 返回响应实体
        return ResponseEntity.ok(response);
    }

    @Operation(summary = "查询用户活动关注")
    @GetMapping("selectUserActivity")
    public ResponseEntity<Object> selectUserActivity(AsUserActivityDTO asUserActivityDTO) {
        return ResponseEntity.ok(asUserActivityService.selectAsUserActivityAll(asUserActivityDTO));
    }
}


